\section{Introduction}

\label{sec:intro}

Model Predictive Control (MPC) is an advanced control method that utilizes a lot
of computation, especially for large-scale systems and fast-dynamics systems.
Because of this limitation in computational complexity, MPC has been popular
amongst slow moving systems, e.g. in the process industry. However, MPC is a
sophisticated method that directly addresses control design challenges such as
controller limits and uses forecasted information about the future to inform its
decisions. Most other control methods do not address these concerns, and the
control designer must manually tune the controller to avoid running into these
problems.

Thus, it is of interest to improve the computational performance of model
predictive controllers so that MPC can be applied to more complex systems. There
are various angles to this problem; some look at the design of the controller
and/or system, and some study the algorithms that are used to solve the
optimization problem posed by the controller. This project examines the
low-level computation of a specific algorithm for a specific problem
formulation.

The computational crux of MPC is the solving of an optimization problem, and
resolving this problem with a sensor reading updates at a high frequency.
Various optimization problems may be formed for MPC, including linear programs,
mixed integer programs, semi-definite programs; we focus on quadratic
programming in this project. The algorithm we utilize is the Parallel Quadratic
Programming (PQP) algorithm proposed by Brand et. al \cite{PQPMPC}. The authors
had implemented this algorithm on a CPU using multi-threaded processing and
showed that it was faster than MATLAB's QuadProg solver. We implement this
algorithm for MPC on a GPU. The particular application for MPC that we target
is heating, ventilation and air conditioning (HVAC) system of a building.

The rest of this report is organized as follows: Section~\ref{sec:motivation}
gives more detail about the particular application, Section~\ref{sec:mpc} gives
an introduction to the model predictive controller, Section~\ref{sec:pqp-alg}
details the PQP algorithm, Section~\ref{sec:strategy} discusses the strategy we
adopted for parallelization of this particular application.  We present the
results of our implementation and a comparison with other solvers in
Section~\ref{sec:results} and Section~\ref{sec:othersolvers} respectively.
Finally, the conclusions and the future directions for the work are discussed in
Section~\ref{sec:conclusion}.



